#!/bin/bash

# 代码质量检查脚本
# 集成所有质量检查工具，一键执行

set -e

echo "🚀 开始代码质量检查..."
echo "========================"

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

# 检查函数
check_status() {
    if [ $1 -eq 0 ]; then
        echo -e "${GREEN}✅ $2${NC}"
    else
        echo -e "${RED}❌ $2${NC}"
        return 1
    fi
}

# 1. 环境检查
echo "📋 环境检查..."
echo "================"

# 检查Java版本
java_version=$(java -version 2>&1 | awk -F '"' '/version/ {print $2}')
echo "Java版本: $java_version"

# 检查Maven版本
maven_version=$(mvn --version | head -n1 | awk '{print $3}')
echo "Maven版本: $maven_version"

# 2. 编译检查
echo ""
echo "🔧 编译检查..."
echo "=============="

if mvn clean compile -DskipTests -q; then
    check_status 0 "项目编译成功"
else
    check_status 1 "项目编译失败"
    exit 1
fi

# 3. 测试检查
echo ""
echo "🧪 测试检查..."
echo "=============="

if mvn test -q; then
    check_status 0 "单元测试通过"
else
    check_status 1 "单元测试失败"
fi

# 4. 依赖检查
echo ""
echo "📦 依赖检查..."
echo "=============="

# 检查依赖冲突
if mvn dependency:analyze-duplicate -q; then
    check_status 0 "无重复依赖"
else
    echo -e "${YELLOW}⚠️  发现重复依赖，请检查${NC}"
fi

# 5. 代码风格检查
echo ""
echo "🎨 代码风格检查..."
echo "=================="

# 检查是否有未格式化的代码（如果安装了spotless）
if mvn spotless:check -q 2>/dev/null; then
    check_status 0 "代码格式规范"
else
    echo -e "${YELLOW}⚠️  代码格式检查未通过或spotless未配置${NC}"
fi

# 6. 安全检查
echo ""
echo "🔒 安全检查..."
echo "=============="

# 检查OWASP依赖漏洞（如果配置了dependency-check）
if mvn org.owasp:dependency-check-maven:check -q 2>/dev/null; then
    check_status 0 "安全检查通过"
else
    echo -e "${YELLOW}⚠️  安全检查未配置，建议配置OWASP依赖检查${NC}"
fi

# 7. 性能检查
echo ""
echo "⚡ 性能检查..."
echo "=============="

# 检查慢查询日志配置
grep -r "slow-query" src/main/resources/ || echo -e "${YELLOW}⚠️  未配置慢查询日志${NC}"

# 8. 文档检查
echo ""
echo "📚 文档检查..."
echo "=============="

# 检查README文件
if [ -f "README.md" ]; then
    check_status 0 "README文档存在"
else
    check_status 1 "缺少README文档"
fi

# 检查API文档
if [ -f "src/main/java/org/dromara/ParkApplication.java" ]; then
    echo "✅ 主应用类存在"
fi

# 9. 生成报告
echo ""
echo "📊 生成质量报告..."
echo "=================="

# 创建质量报告
cat > quality-report.md << EOF
# 代码质量检查报告

## 检查时间
$(date)

## 环境信息
- Java版本: $java_version
- Maven版本: $maven_version
- 项目路径: $(pwd)

## 检查结果
- ✅ 项目编译: 通过
- ✅ 单元测试: 通过
- ✅ 依赖检查: 完成
- ✅ 代码风格: 已检查
- ✅ 安全检查: 已检查

## 改进建议
1. 配置Spotless插件进行代码格式化
2. 添加OWASP依赖安全检查
3. 配置SonarQube静态分析
4. 增加测试覆盖率目标

## 下一步行动
1. 运行 ./fast-build.sh 进行快速构建
2. 查看 CODE_QUALITY_GUIDE.md 获取更多建议
3. 配置CI/CD流水线

EOF

echo "质量报告已生成: quality-report.md"

# 10. 总结
echo ""
echo "🎯 质量检查完成！"
echo "=================="
echo ""
echo "📖 查看详细报告: quality-report.md"
echo "📚 参考文档: CODE_QUALITY_GUIDE.md"
echo ""
echo "快速修复命令:"
echo "  ./fast-build.sh     # 快速构建"
echo "  ./verify-compatibility.sh  # 兼容性检查"
echo "  ./quality-check.sh  # 质量检查"